/********************************************************************************
    * 文件名称 ：E53_SC2.c
    * 作     者：小熊派开源社区
    * 版     本：V1.0
    * 编写日期 ：2019-5-27
    * 功     能：E53_SC2扩展板驱动
*********************************************************************************
    * 说    明 ：本例程配套小熊派开源社区开发板使用
    *
    * 淘     宝：https://shop336827451.taobao.com/
    * 论     坛：https://bbs.huaweicloud.com/forum/forum-734-1.html
    * 微信公众号：小熊派开源社区
*********************************************************************************/
#include "E53_SC2.h"
#include <board.h>
#include <rtdevice.h>
#include "sensor_inven_mpu6xxx.h"

#define MPU6050_I2C_BUS_NAME          "i2c1"      //i2c总线设备名
static struct mpu6xxx_device *mpu6xxx_dev;     //6050控制句柄
static struct mpu6xxx_3axes  accel;     //陀螺仪，加速度结构体

/***************************************************************
  * 函数功能: 初始化MPU6050芯片
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明: 无
  ***************************************************************/ 
static void MPU6050_Init(void)
{
  mpu6xxx_dev = (struct mpu6xxx_device *)mpu6xxx_init(MPU6050_I2C_BUS_NAME, MPU6XXX_ADDRESS_AD0_LOW);   //初始化MPU6050，测量单位为角速度，加速度

  mpu6xxx_set_param(mpu6xxx_dev, MPU6XXX_ACCEL_RANGE, MPU6XXX_GYRO_RANGE_250DPS);  //陀螺仪范围配置
  mpu6xxx_set_param(mpu6xxx_dev, MPU6XXX_ACCEL_RANGE, MPU6XXX_ACCEL_RANGE_2G);//加速度计
  mpu6xxx_set_param(mpu6xxx_dev, MPU6XXX_DLPF_CONFIG, MPU6XXX_DLPF_188HZ);//低通滤波
  mpu6xxx_set_param(mpu6xxx_dev, MPU6XXX_SAMPLE_RATE, 500);//采样频率      //中断使能寄存器
}

/***************************************************************
* 函数名称: E53_SC2_Init
* 说    明: 初始化E53_SC2
* 参    数: 无
* 返 回 值: 无
***************************************************************/
void E53_SC2_Init(void)
{
    MPU6050_Init();
    rt_pin_mode(E53_GPIO2, PIN_MODE_OUTPUT);//输出模式
    rt_pin_mode(E53_GPIO3, PIN_MODE_OUTPUT);//输出模式
}
/***************************************************************
* 函数名称: E53_SC2_Read_Data
* 说    明: 读取数据
* 参    数: 无
* 返 回 值: 无
***************************************************************/
void E53_SC2_Read_Data(E53_SC2_Data *ReadData)
{
    mpu6xxx_get_temp(mpu6xxx_dev, &ReadData->Temperature);
    mpu6xxx_get_accel(mpu6xxx_dev, &accel);
    ReadData->Accel[ACCEL_X_AXIS] = accel.x;
    ReadData->Accel[ACCEL_Y_AXIS] = accel.y;
    ReadData->Accel[ACCEL_Z_AXIS] = accel.z;
}
/***************************************************************
 * 函数名称: E53_SC2_LedD1_Set
 * 说    明: LED_D1状态设置
 * 参    数: status,ENUM枚举的数据
 *                                    OFF,关
 *                                    ON,开
 * 返 回 值: 无
 ***************************************************************/
void E53_SC2_LedD1_Set(E53_SC2_Status status)
{
    if (status == ON) {
        rt_pin_write(E53_GPIO2, PIN_HIGH);
    }

    if (status == OFF) {
        rt_pin_write(E53_GPIO2, PIN_LOW);
    }
}

/***************************************************************
 * 函数名称: E53_SC2_LedD2_Set
 * 说    明: LED_D2状态设置
 * 参    数: status,ENUM枚举的数据
 *                                    OFF,关
 *                                    ON,开
 * 返 回 值: 无
 ***************************************************************/
void E53_SC2_LedD2_Set(E53_SC2_Status status)
{
    if (status == ON) {
        rt_pin_write(E53_GPIO3, PIN_HIGH);
    }

    if (status == OFF) {
        rt_pin_write(E53_GPIO3, PIN_LOW);
    }
}
